/*MyPhotoIndex Free Photo Organizer <www.myphotoindex.com>
  Copyright (C) <2006-2009>  <Asaf Yarkoni asaf@yarkoni.net>

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
using System;
using System.Collections.Generic;
using System.Text;
using MyPhotoIndex.ImageBank;
using System.Collections.ObjectModel;
using MyPhotoIndex.Importer.CameraImageAcquisition;
using MyPhotoIndex.Interfaces;
using MyPhotoIndex.Importer;
using MyPhotoIndex.Interfaces.Imaging;

namespace MyPhotoIndex.Wizards.CameraImport
{
    public class AcquiredImageCollection : IImageCollection
    {
        private ReadOnlyCollection<IAcquiredImage> m_imageList;
        private Dictionary<int, IImageData> m_imageDataCache;

        public AcquiredImageCollection(ReadOnlyCollection<IAcquiredImage> imageList)
        {
            m_imageList = imageList;
            m_imageDataCache = new Dictionary<int, IImageData>();

            int imageId = 0;
            foreach (IAcquiredImage acquiredImage in m_imageList)
            {
                IImageData imageData = new ImportImageData();
                imageData.Id = imageId;
                imageData.FileName = acquiredImage.Name;
                imageData.Thumbnail = acquiredImage.Thumbnail;
                imageData.DateTaken = acquiredImage.DateTaken;
                m_imageDataCache.Add(imageId++, imageData);
            }
        }

        public IImageData this[int imageId]
        {
            get
            {
                IImageData imageData = null;
                if (m_imageDataCache.TryGetValue(imageId, out imageData) == true)
                {
                    return imageData;
                }

                return null;
            }
        }

        public int Count
        {
            get { return m_imageList.Count; }
        }

        public IImageData[] ToArray()
        {
            List<IImageData> list = new List<IImageData>(m_imageDataCache.Values);
            return list.ToArray();
        }

        #region IDisposable Members

        public void Dispose()
        {
            foreach (ImageData imageData in m_imageDataCache.Values)
            {
                imageData.Dispose();
            }
        }

        #endregion

        #region IEnumerable<ImageData> Members

        public IEnumerator<IImageData> GetEnumerator()
        {
            return m_imageDataCache.Values.GetEnumerator();
        }

        #endregion

        #region IEnumerable Members

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        #endregion

        #region IImageCollection Members

        public event EventHandler<EventArgs> ImageCollectionLoadedEvent;

        public void Remove(int imageId)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void Remove(int imageId, bool deleteFromMedia)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }
}
